package org.lisy.java.string;

public class StringOperate {

	public static void main(String[] args) {
		String str = "A:abc01;B:bc11d;M:cdes";
		String str2 = "A:abc01;B:bc11d;M:cdeS";
		String str3 = "A:abc01;B:bc11d;M:cdez";
		
		// 基本操作
		basicOperation(str);
		
		// 字符串比较
		compareOperation(str, str2, str3);
		
		// 字符串转换
		conversionOperation();
		
		// 字符串查找
		findOperation(str);
		
		// 字符串拆分
		divideOperation(str);
		
		// 字符串替换修改
		changeOperation(str, str2);

		// 字符串格式化
		formatOperation();
	}

	private static void basicOperation(String str) {
		// 获取字符串长度
		int length = str.length();
		System.out.println(length);
		
		// 获取字符串中的第i(索引)个字符
		char ch = str.charAt(5);
		System.out.println(ch);
		
		// 获取指定位置的字符，参数开始复制位置、结束复制位置、复制数组，复制数组开始位置
		char array[] = new char[str.length()];
		str.getChars(3, 8, array, 1);
		System.out.println(array);
	}

	private static void compareOperation(String str, String str2, String str3) {
		// 大小比较 <:返回负数; =:返回0; >:返回正数
		// 不忽略字符串大小写情况下字符串的大小比较
		int compare = str.compareTo(str2);
		System.out.println(compare);
		compare = str.compareTo(str3);
		System.out.println(compare);
		// 忽略字符串大小写情况下字符串的大小比较
		compare = str.compareToIgnoreCase(str2);
		System.out.println(compare);
		
		// 不忽略字符串大小写情况下判别字符串相等
		boolean result = str.equals(str2);
		System.out.println(result);
		// 忽略字符串大小写情况下判别字符串相等
		result = str.equalsIgnoreCase(str2);
		System.out.println(result);
	}

	private static void conversionOperation() {
		// 字符串类型转换为布尔类型
		// getBoolean(String name) 当且仅当以参数命名的系统属性存在，且等于"true"字符串时，才返回true
		String s1 = "false";
		System.setProperty(s1, "true");
		boolean bool = Boolean.getBoolean(s1);
		System.out.println(bool);
		bool = Boolean.parseBoolean("true");
		// 字符串类型转换为整形
		Integer.parseInt("20");
		// 字符串类型转换为长整形
		Long.parseLong("1024");
		// 字符串类型转换为单精度浮点型
		Float.parseFloat("1.521");
		// 字符串类型转换为双精度浮点型
		Double.parseDouble("1.52123");
		// 字符串类型转换为byte型
		Byte.parseByte("2");
		
		// 将其他数据类型转换为字符串类型方法 String.valueOf()
		System.out.println(String.valueOf(bool));
	}

	private static void findOperation(String str) {
		// 查找字符开始出现的位置
		// 找到第一次出现所在的索引
		int index = str.indexOf(";");
		System.out.println(index);
		// 找到索引8以后的第一次出现所在索引
		index = str.indexOf(";", 8);
		System.out.println(index);
		
		// 查找字符最后出现的位置
		// 找到最后一次出现所在的索引
		index = str.lastIndexOf(";");
		System.out.println(index);
		// 找到索引10，最后一次出现所在索引
		index = str.lastIndexOf(";", 10);
		System.out.println(index);
	}

	private static void divideOperation(String str) {
		// 字符串截取方法
		System.out.println(str.substring(5));
		System.out.println(str.substring(2, 5));
		
		// 字符串拆分方法
		String[] array = str.split(";");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + "\t");
		}
		System.out.println("");
		String[] array2 = str.split(";", 2);
		for (int i = 0; i < array2.length; i++) {
			System.out.print(array2[i] + "\t");
		}
		System.out.println("");
	}

	private static void changeOperation(String str, String str2) {
		// 合并字符串
		String result = str.concat(str2);
		System.out.println(result);
		
		// 将字符全部转化为小写
		result = str.toLowerCase();
		System.out.println(result);
		
		// 将字符全部转化为大写
		result = str.toUpperCase();
		System.out.println(result);
		
		// 替换
		result = str.replaceFirst("b", "java-");
		System.out.println(result);
		result = str.replaceAll("b", "java-");
		System.out.println(result);
	}

	private static void formatOperation() {
		// 不足四位时左边用 0 补全
		System.out.println(String.format("%04d", 12));
	}

}
